namespace Felbot.Protocol {
    /// <summary>Specifies what Battle.net packet was recieved or is being sent.</summary>
    internal enum BattleNetPacketIDs : byte {
        SID_NULL = 0x00,
        SID_CLIENTID = 0x05,
        SID_STARTVERSIONING = 0x06,
        SID_REPORTVERSION = 0x07,
        SID_ENTERCHAT = 0x0A,
        SID_GETCHANNELLIST = 0x0B,
        SID_JOINCHANNEL = 0x0C,
        SID_CHATCOMMAND = 0x0E,
        SID_CHATEVENT = 0x0F,
        SID_LEAVECHAT = 0x10,
        SID_LOCALEINFO = 0x12,
        SID_FLOODDETECTED = 0x13,
        SID_UDPPINGRESONSE = 0x14,
        SID_MESSAGEBOX = 0x19,
        SID_LOGONCHALLENGEEX = 0x1D,
        SID_CLIENTID2 = 0x1E,
        SID_PING = 0x25,
        SID_LOGONCHALLENGE = 0x28,
        SID_LOGONRESPONSE = 0x29,
        SID_CDKEY = 0x30,
        SID_CHANGEPASSWORD = 0x31,
        SID_CDKEY2 = 0x36,
        SID_LOGONRESPONSE2 = 0x3A,
        SID_CREATEACCOUNT2 = 0x3D,
        SID_LOGONREALMEX = 0x3E,
        SID_QUERYREALMS2 = 0x40,
        SID_NETGAMEPORT = 0x45,
        SID_NEWS_INFO = 0x46,
        SID_AUTH_INFO = 0x50,
        SID_AUTH_CHECK = 0x51,
        SID_AUTH_ACCOUNTCREATE = 0x52,
        SID_AUTH_ACCOUNTLOGON = 0x53,
        SID_AUTH_ACCOUNTLOGONPROOF = 0x54,
        SID_AUTH_ACCOUNTCHANGE = 0x55,
        SID_AUTH_ACCOUNTCHANGEPROOF = 0x56,
        SID_AUTH_ACCOUNTUPGRADE = 0x57,
        SID_AUTH_ACCOUNTUPGRADEPROOF = 0x58,
        SID_SETEMAIL = 0x59,
        SID_SWITCHPRODUCT = 0x5C,
        SID_WARDEN = 0x5E,
        SID_GAMEPLAYERSEARCH = 0x60,
        SID_FRIENDSLIST = 0x65,
        SID_FRIENDSUPDATE = 0x66,
        SID_FRIENDSADD = 0x67,
        SID_FRIENDSREMOVE = 0x68,
        SID_FRIENDSPOSITION = 0x69,
        SID_CLANFINDCANDIDATES = 0x70,
        SID_CLANINVITEMULTIPLE = 0x71,
        SID_CLANCREATIONINVITATION = 0x72,
        SID_CLANDISBAND = 0x73,
        SID_CLANMAKECHIEFTAIN = 0x74,
        SID_CLANINFO = 0x75,
        SID_CLANQUITNOTIFY = 0x76,
        SID_CLANINVITATION = 0x77,
        SID_CLANREMOVEMEMBER = 0x78,
        SID_CLANINVITATIONRESPONSE = 0x79,
        SID_CLANRANKCHANGE = 0x7A,
        SID_CLANSETMOTD = 0x7B,
        SID_CLANMOTD = 0x7C,
        SID_CLANMEMBERLIST = 0x7D,
        SID_CLANMEMBERREMOVED = 0x7E,
        SID_CLANMEMBERSTATUSCHANGE = 0x7F,
        SID_CLANMEMBERRANKCHANGE = 0x81,
        SID_CLANMEMBERINFORMATION = 0x82
    }

    /// <summary>Specifies what Battle.net realm packet was recieved or is being sent.</summary>
    internal enum BattleNetRealmPacketIDs : byte {
        MCP_STARTUP = 0x01,
        MCP_CHARCREATE = 0x02,
        MCP_CHARLOGON = 0x07,
        MCP_CHARDELETE = 0x0A,
        MCP_CHARLIST2 = 0x19
    }

    /// <summary>Specifies what BotNet packet was recieved or is being sent.</summary>
    internal enum BotNetPacketIDs : byte {
        PACKET_IDLE = 0x00,
        PACKET_LOGON = 0x01,
        PACKET_STATSUPDATE = 0x02,
        PACKET_DATABASE = 0x03,
        PACKET_MESSAGE = 0x04,
        PACKET_CYCLE = 0x05,
        PACKET_USERINFO = 0x06,
        PACKET_USERLOGGINGOFF = 0x07,
        PACKET_BROADCASTMESSAGE = 0x07,
        PACKET_COMMAND = 0x08,
        PACKET_CHANGEDBPASSWORD = 0x09,
        PACKET_BOTNETVERSION = 0x0A,
        PACKET_BOTNETCHAT = 0x0B,
        PACKET_ACCOUNT = 0x0D,
        PACKET_CHATDROPOPTIONS = 0x10
    }

    /// <summary>Specifies what event occured.</summary>
    internal enum BattleNetEventIDs : short {
        /// <summary>Occurs when a user is visible in a channel you join.</summary>
        EID_SHOWUSER = 0x01,
        /// <summary>Occurs when a user joins the channel.</summary>
        EID_JOIN = 0x02,
        /// <summary>Occurs when a user leaves the channel.</summary>
        EID_LEAVE = 0x03,
        /// <summary>Occurs when a user whispers you.</summary>
        EID_WHISPER = 0x04,
        /// <summary>Occurs when a user talks in the channel.</summary>
        EID_TALK = 0x05,
        /// <summary>Occurs when a Battle.net Administrator or Blizzard Representative broadcasts a message.</summary>
        EID_BROADCAST = 0x06,
        /// <summary>Occurs when you join a channel.</summary>
        EID_CHANNEL = 0x07,
        /// <summary>Occurs when a user's flags update in the channel (can be used to detect "hidden" users).</summary>
        EID_USERFLAGS = 0x09,
        /// <summary>Occurs when you whisper a user.</summary>
        EID_WHISPERSENT = 0x0A,
        /// <summary>Occurs when you are unable to join a channel because it is full.</summary>
        EID_CHANNELFULL = 0x0D,
        /// <summary>Occurs when you are unable to join a channel because it does not exist.</summary>
        EID_CHANNELDOESNOTEXIST = 0x0E,
        /// <summary>Occurs when you are unable to join a channel because it is restricted.</summary>
        EID_CHANNELRESTRICTED = 0x0F,
        /// <summary>Occurs when you recieve an information message.</summary>
        EID_INFO = 0x12,
        /// <summary>Occurs when you recieve an error message.</summary>
        EID_ERROR = 0x13,
        /// <summary>Occurs when a user emotes in the channel (can be you).</summary>
        EID_EMOTE = 0x17,
        /// <summary>Occurs in CHAT at intervals to keep the connection alive.</summary>
        EID_NULL = 0x03E8, //1000 (2000 (CHAT EID_NULL) - 1000)
        /// <summary>Occurs in CHAT when you enter the chat environment.</summary>
        EID_NAME = 0x03F2 //1010 (2010 (CHAT EID_NAME) - 1000)
    }

    /// <summary>Specifies what Warden request was sent. These names were invented.</summary>
    internal enum BattleNetWardenRequests : byte {
        /// <summary>Requests a confirmation that the client has the current module.</summary>
        WID_CONFIRMCURRENT = 0x00,
        /// <summary>Provides the client with the current module.</summary>
        WID_CURRENTMODULE = 0x01,
        /// <summary>Requests that the client confirm that it is valid.</summary>
        WID_VERIFYCHAT = 0x02
    }
}
